package com.wly
{
	import com.netease.protobuf.WritingBuffer;
	import com.wly.gpb.Person;
	import com.wly.gpb.SendTest;
	
	import flash.display.Sprite;
	import flash.events.ProgressEvent;
	import flash.net.Socket;
	import flash.utils.ByteArray;
	
	public class GpbTest extends Sprite
	{
		private static var SOCKADDR:String = "127.0.0.1";
		private static var PORT:int        = 1234;
		private var _socket:Socket;
		
		public function GpbTest()
		{
			super();
			initSocket();
			DoTest();
		}
		
		private function DoTest():void
		{
			
			var byteArr:ByteArray = new ByteArray;
			var retArr:ByteArray  = new ByteArray;
			
			var sendTest:SendTest = new SendTest;
			sendTest.name = "wly";
			sendTest.pass = "123456";
			sendTest.writeTo(byteArr);
			byteArr.position = 0;
			retArr.writeShort(byteArr.length);
			retArr.writeShort(3);
			retArr.writeBytes(byteArr);
			_socket.writeBytes(retArr);
		}
		
		private function initSocket():void
		{
			_socket = new Socket;
			_socket.connect(SOCKADDR, PORT);
			_socket.addEventListener(ProgressEvent.SOCKET_DATA, onData);
		}
		
		private function onData(e:ProgressEvent):void
		{
			trace(this, "onData");
			var byteArr:ByteArray = new ByteArray;
			while(_socket.bytesAvailable)
			{
				byteArr.writeByte(_socket.readByte());
			}
			//_socket.writeBytes(byteArr);
			byteArr.position = 0;
			trace(this, byteArr);
			var sendTest:SendTest = new SendTest;
			var len:int = byteArr.readShort();
			var type:int= byteArr.readShort();
			trace(this, len, type);
			sendTest.mergeFrom(byteArr);
			trace(this, len, type, sendTest.name, sendTest.pass);
		}
		
		private function getHexString(byteArr:ByteArray):String
		{
			var retStr:String = "";
			
			if(!byteArr)
			{
				return "";
			}
			
			byteArr.position = 0;
			while(byteArr.bytesAvailable)
			{
				retStr += byteArr.readUnsignedByte().toString(16).toUpperCase();
			}
			return retStr;
		}
		
//		private function getBinString(byteArr:ByteArray):String
//		{
//			var str:String =  "";
//			var i:int;
//			byteArr.position = 0;
//			while(byteArr.bytesAvailable)
//			{
//				if(byteArr.readBoolean())
//				{
//					str += "1";
//				}
//				else
//				{
//					str += "0";
//				}
//			}
//			return str;
//		}
		
	}
}